Computing environments have included and relied on storage devices to store programs and data. The storage devices have evolved over the years from tape and reel, to magnetic disk drives, to solid state storage units. With each evolutionary step, protocols and interfaces have conventionally either been adapted from the previous type or developed a new. Additionally, at each evolutionary step, the level of control a host system has over the storage device has varied, typically influenced by such considerations as storage complexity, storage amount, and the sophistication of the user. The latest evolutionary step has included the development and adoption of solid state devices to replace magnetic disk drives, in particular, the adoption of Solid State Drives (SSDs). The initial adoption of the solid state devices included the use of conventional interface protocols used for magnetic disk drives, but the protocols may not allow some users the flexibility and control they may desire to have over the solid state devices.
SSDs conventionally communicate with a host controller using various interface protocols, such as ATA, SATA, PCIe, etc. Each of these interface protocols may have their own associated communication structures, e.g., packet structures, which may also include different command types and user-available packet sections included in each packet. Other distinguishing features of the various protocols may include packet transfer rates, timing, various types of control, and etc. As such, each interface protocol may provide flexibility in ways the other interface protocols do not. Accordingly, there may be tradeoffs to consider when determining which interface protocol to choose for an SSD.